package com.play2gether;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import static com.play2gether.Conexiones.verificaConexion;

/**
 * Created by Raul on 28/03/14.
 */
public class MenuPrincipalActivity extends ActionBarActivity implements View.OnClickListener {

    public  Button             btVincular;
    public  Button             btJugar;
    public  Button             btKamasutra;

    public  SharedPreferences  preferencias;
    public  String             id;
    public int estado;
    public String url;
    private DataBaseManager db;

    //Botones para el navbar
    public Button btFormularioNV;
    public Button btSugerenciaNV;
    public Button btOpcionesNV;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu_principal);

        url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/pooling";

        preferencias = getSharedPreferences("sesion",Context.MODE_PRIVATE);
        id = preferencias.getString("id", "");
        //String sesionActiva = preferencias.getString("activa","");

        db = new DataBaseManager(this);

        btVincular  = (Button)        findViewById (R.id.btVincular);
        btJugar     = (Button)   findViewById (R.id.btJugar);
        btKamasutra = (Button)   findViewById (R.id.btKamasutra);

        btVincular.setOnClickListener(this);
        btJugar.setOnClickListener(this);
        btKamasutra.setOnClickListener(this);

        //Navbar
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        actionBar.setCustomView(R.layout.navbar);
        //Botones para el navbar
        btFormularioNV = (Button) findViewById(R.id.btFormularioNV);
        btSugerenciaNV = (Button) findViewById(R.id.btSugerenciaNV);
        btOpcionesNV   = (Button) findViewById(R.id.btOpcionesNV);

        //Botones para el navbar
        btFormularioNV.setOnClickListener(this);
        btSugerenciaNV.setOnClickListener(this);
        btOpcionesNV.setOnClickListener(this);

       // if (estado==2){ btVincular.setVisibility(View.INVISIBLE);}
       // else {
            //btVincular.setText(obtenerEstado());
    //}

    }

    @Override
    public void onClick(View v) {

        Intent intent;


        switch (v.getId()) {

            case R.id.btVincular:
                if(verificaConexion(this)){
                    try {
                        new consultarVinculacion().execute();
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("ERROR", e.getMessage());
                    }
                }else {
                    mostrarAlerta("No hay conexión", "Prueba de nuevo cuando estés conectado a la red!!");
                }
                break;
            case R.id.btJugar: Toast.makeText(getApplicationContext(), "btJugar tocado", Toast.LENGTH_SHORT).show();


                break;
            case R.id.btKamasutra: intent = new Intent(MenuPrincipalActivity.this,IndiceKamasutraActivity.class);
                                   startActivity(intent);
                                   break;
            //Botones para el natvar
            case R.id.btFormularioNV:
                //Intent intentF = new Intent(IndiceKamasutraActivity.this,PerfilActivity.class);
                //startActivity(intentF);
                break;
            case R.id.btSugerenciaNV:
                //Intent intentS = new Intent(IndiceKamasutraActivity.this,PerfilActivity.class);
                //startActivity(intentS);
                break;
            case R.id.btOpcionesNV:
                Toast.makeText(getApplicationContext(), "opciones", Toast.LENGTH_SHORT).show();
                mostrarOpciones();
                break;
        }

    }

    public void mostrarAlerta(String titulo, String texto){
        AlertDialog.Builder alertDialog2 = new AlertDialog.Builder(MenuPrincipalActivity.this);
        alertDialog2.setTitle(titulo);
        alertDialog2.setMessage(texto);

        alertDialog2.setPositiveButton("ACEPTAR",new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {    }
                });

        alertDialog2.show();

    }
    public void guardarSesion(String n){
        preferencias = getSharedPreferences("sesion", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferencias.edit();
        editor.putString("activa", n);
        editor.putString("id","");
        editor.commit();
        finish();
    }
     public String obtenerEstado(){
         DataBaseManager db = new DataBaseManager(this);
         estado =  db.consultarEstadoUsuario(id);
         String texto = new String();

         if (estado==0){ texto = "Vincular"; }
         else if (estado==1){ texto = "Consultar vinculación";}

     return texto;
     }

    private void mostrarOpciones(){
        final CharSequence[] items2 = {"Mi perfil", "Configurar mi play2gether", "Cerrar sesión", "Desvincularme de mi pareja", "Sobre play2gether", "Cerrar"};

        AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
        builder2.setTitle("Menu de opciones");
        builder2.setItems(items2, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                dialog.cancel();
                switch(item){
                    case 0: Intent intent = new Intent(MenuPrincipalActivity.this,PerfilActivity.class);
                        startActivity(intent);
                        break;
                    case 1: Intent intent3 = new Intent(MenuPrincipalActivity.this,principalActivity.class);
                        startActivity(intent3);
                        break;
                    case 2: guardarSesion("0");
                        intent = new Intent(MenuPrincipalActivity.this,loginActivity.class);
                        finish();
                        startActivity(intent);
                        break;
                    case 3: break;
                    case 4: break;
                }
            }
        });
        AlertDialog alert2 = builder2.create();
        alert2.requestWindowFeature(Window.FEATURE_NO_TITLE);
        WindowManager.LayoutParams wmlp2 = alert2.getWindow().getAttributes();
        wmlp2.gravity = Gravity.TOP | Gravity.RIGHT;
        wmlp2.x = 0;   //x position
        wmlp2.y = 124;   //y position
        alert2.show();
    }

    public class consultarVinculacion extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(), "Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected  JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.
            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("asunto","envios_pendientes"));
            params.add(new BasicNameValuePair("id1",id));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
                //text = EntityUtils.toString(entity);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}

            //return json;
            return json;
        }
        protected void onPostExecute(JSONObject json) {
            String tipo_envio = "0";
            String asunto = "";
            String estado = "ok";
            String email = "";
            String apodo = "";

            try {
                int i=0;
                String pos;
                while (i<json.length()) {
                    pos = "e" + i;
                    JSONObject objeto = (JSONObject) json.get(pos);
                    tipo_envio = (String) objeto.get("tipo_envio");
                    estado = (String) objeto.get("estado");
                    email = (String) objeto.get("email");
                    apodo = (String) objeto.get("apodo");
                    i++;
                }
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(), "Se ha producido un error. Prueba de nuevo!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }

            if (estado.equals("ko")) {
                Toast.makeText(getApplicationContext(), "Se ha producido un error. Prueba de nuevo!!", Toast.LENGTH_SHORT).show();

            } else if (estado.equals("ok")) {
                if (tipo_envio.equals("1")) {
                    //String apodo = db.consultarApodo(id);
                    db.modificarApodo(apodo,id);

                    db.cambiarEstadoUsuario(id, 2);
                    //mostrarAlerta("Vinculacion aceptada", " Felicidades, tu " + apodo + " ha aceptado tu solicitud de vinculación!!");
                    mostrarAlerta("Vinculacion aceptada", " Felicidades, tu pareja ha aceptado tu solicitud de vinculación!!");
                } else if (tipo_envio.equals("2")) {
                    Intent intent = new Intent(MenuPrincipalActivity.this, PeticionVinculacionActivity.class);
                    intent.putExtra ("email",email);
                    intent.putExtra ("id",id);
                    startActivity(intent);
                } else if (tipo_envio.equals("0")){
                    Intent intent = new Intent(MenuPrincipalActivity.this, VincularActivity.class);
                    intent.putExtra ("id",id);
                    startActivity(intent);
                }
            }
        }
    }
}
